package lambdademo;


import javax.jws.Oneway;
import java.util.Comparator;
import java.util.PriorityQueue;

/**
 * 函数式接口，
 * 加上这个注解编译器会自动进行解释的，一个接口只能有一个抽象的方法
 * lambda可以理解为创建了一个类，实现了这个类，我们重写这个接口中的方法，但是我们并没有真正的创建这个类
 * lambda实际上就是匿名内部类的简化
 */
@FunctionalInterface
	interface NoParameterNoReturn {
		void test();
	}
	//无返回值一个参数
	@FunctionalInterface
	interface OneParameterNoReturn {
		void test(int a);
	}

	//无返回值多个参数
	@FunctionalInterface
	interface MoreParameterNoReturn {
		void test(int a,int b);
	}

	//有返回值无参数
	@FunctionalInterface
	interface NoParameterReturn {
		int test();
	}


	//有返回值一个参数
	@FunctionalInterface
	interface OneParameterReturn {
		int test(int a);
	}

	//有返回值多参数
	@FunctionalInterface
	interface MoreParameterReturn {
		int test(int a,int b);
	}

	public class Test {
		public static void main(String[] args) {
			MoreParameterReturn moreParameterReturn=new MoreParameterReturn() {
				@Override
				public int test(int a, int b) {
					return a+b;
				}
			};
			MoreParameterReturn moreParameterReturn1=(a,b)->{
				System.out.println(a+b);
				return a+b;
			};
			System.out.println(moreParameterReturn1.test(10, 20));
		}
		public static void main3(String[] args) {
			OneParameterNoReturn oneParameterNoReturn=new OneParameterNoReturn() {
				@Override
				public void test(int a) {
					System.out.println("a");
				}
			};
			OneParameterReturn oneParameterReturn3=a->{return 1;
			};
			System.out.println(oneParameterReturn3.test(10));
			OneParameterReturn oneParameterReturn1=(a) -> {
				System.out.println("a");
				return a;
			};
			oneParameterReturn1.test(10);
		}
		public static void main2(String[] args) {
			NoParameterNoReturn noParameterNoReturn=new NoParameterNoReturn() {
				@Override
				public void test() {
					System.out.println("无参数无返回值");
				}
			};
			noParameterNoReturn.test();
			NoParameterNoReturn noParameterNoReturn2=() -> System.out.println("111111111");
			noParameterNoReturn2.test();
			NoParameterNoReturn noParameterNoReturn11=()-> System.out.println("无参数无返回值");
			noParameterNoReturn11.test();
		}
		public static void main1(String[] args) {
			int a = 10;
			PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(new Comparator<Integer>() {
				@Override
				public int compare(Integer o1, Integer o2) {
					// a = 20;
					System.out.println(a);
					return o1 - o2;
				}
			});
			//a = 99;
			PriorityQueue<Integer> que2=new PriorityQueue<>(((o1, o2) -> o1-o2));
		}
}

